package interfases;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Date;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;

import javax.swing.DefaultComboBoxModel;
import javax.swing.border.LineBorder;

import controladores.ControladorPerfil;
import logica.Cliente;
import logica.Desarrollador;

public class IAltaPerfil_2 extends JFrame {

	private static final long serialVersionUID = 10L;
	private JPanel contentPane;
	private JTextField titulo;
	private JTextField campoURL;
	private JLabel lblFoto;
	private JButton examinar;
	private JTextField campoWeb;
	private JTextField campoEdad;
	private JTextField campoNombre;
	private JTextField campoApellido;
	private JTextField campoDia;
	private JTextField campoMes;
	private JTextField campoAnio;
	private JComboBox<Object> comboPerfil;
	private JPanel panelFoto;
	private JButton cancelar;
	private JButton aceptar;
	private JLabel lblSitio;
	private JLabel lblPerfil;
	private JLabel lblNombre;
	private JLabel lblApellido;
	private JLabel lblNacimiento;
	private JLabel lblEdad;
	
	private Image foto = null;
	byte[] byteFoto = null;
	
/*************************************************************************************/	
	
	public IAltaPerfil_2(final String nick,  final String email) {
		
		inicializarPantalla();
	
	/*****************************************************************************************************************/
		
		
		//ACCION DEL BOTON CANCELAR
		cancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		
		
		//ACCION DEL BOTON EXAMINAR - PARA ELEGIR UNA FOTO
		examinar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFileChooser se = new JFileChooser();
				se.setFileFilter(new FileNameExtensionFilter("Archivo de Imagen", "jpg", "jpeg"));
				int estado = se.showOpenDialog(null);
				/***************************************************/
				if(estado == JFileChooser.APPROVE_OPTION){
					File archivo = se.getSelectedFile(); //PARA OBTENER EL ARCHIVO SELECCIONADO
					campoURL.setText(archivo.getAbsolutePath());//ESTO ES PARA OBTENER LA URL DEL ARCHIVO SELECCIONADO
					try {
						foto = ImageIO.read(se.getSelectedFile()).getScaledInstance(lblFoto.getWidth(), lblFoto.getHeight(), Image.SCALE_DEFAULT);
						lblFoto.setIcon(new ImageIcon(foto));
						lblFoto.updateUI();
					}
					catch (IOException ex) {
						ex.printStackTrace();
					}
				}
			}
		});
		
		
		//ACCION DEL COMBOBOX DE PERFIL
		comboPerfil.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(comboPerfil.getSelectedItem().toString() == "Desarrollador"){
					campoWeb.setEnabled(true);
				}
				else{
					campoWeb.setEnabled(false);
				}     
			}
		});
		
		
		//ACCION DEL BOTON ACEPTAR
		aceptar.addActionListener(new ActionListener() {
			@SuppressWarnings({ "deprecation", "resource" })
			public void actionPerformed(ActionEvent arg0) {
	
				int edad = Integer.parseInt(campoEdad.getText());
				int anio = Integer.parseInt(campoAnio.getText());
				int mes  = Integer.parseInt(campoMes.getText()) ;
			    int dia  = Integer.parseInt(campoDia.getText());
			    Date nacimiento = new Date(anio-1900, mes-1, dia);
			    String nombre = campoNombre.getText().toUpperCase();
			    String apellido = campoApellido.getText().toUpperCase();
			    
			    try {//OBTENGO LA FOTO
					if(!campoURL.getText().isEmpty()){
						File archivo = new File(campoURL.getText());
						FileInputStream foto = new FileInputStream(archivo);
						ByteArrayOutputStream bos = new ByteArrayOutputStream();
						byte[] buf = new byte[1024];
						for(int readNum; (readNum = foto.read(buf)) != -1;){
							bos.write(buf,0,readNum);
						}
						byteFoto = bos.toByteArray();
					}
			    }
			    catch (Exception e) {
					e.printStackTrace();
				}
			    
				//SI ES CLIENTE
				if (comboPerfil.getSelectedItem().toString() == "Cliente") {
					Cliente nuevo = new Cliente(nick, nombre, apellido, email, nacimiento, edad, foto);
					nuevo.setByteFoto(byteFoto);
					if(new ControladorPerfil().agregarCliente(nuevo)){
						dispose();
						JOptionPane.showMessageDialog(null,"Cliente "+ nick + " ingresado exitosamente");
					}
					else{
						dispose();
						JOptionPane.showMessageDialog(null,"ERROR - NO SE DIO DE ALTA! ");
					}
				}
				
				//SI ES DESARROLLADOR
				if (comboPerfil.getSelectedItem().toString() == "Desarrollador") {
					String link = campoWeb.getText().toUpperCase();
					Desarrollador nuevo = new Desarrollador(nick, nombre, apellido, email, nacimiento, edad, foto, link);
					nuevo.setByteFoto(byteFoto);
					if(new ControladorPerfil().agregarDesarrollador(nuevo)){
						dispose();
						JOptionPane.showMessageDialog(null,"Desarrollador "+ nick + " ingresado exitosamente");
					}
					else{
						dispose();
						JOptionPane.showMessageDialog(null,"ERROR - NO SE DIO DE ALTA! ");
					}
				}
			}
		});
		
	/****************************************************************************************************************************/	
	}
	
	
	//INICIALIZA LA VENTANA PRINCIAL IALTAPERFIL_2
	private void inicializarPantalla(){
		setTitle("Alta de 	Perfil");
		centrarPantalla(this, 710, 440);
		contentPane = new JPanel();
		contentPane.setBackground(new Color(255, 222, 173));
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		panelFoto = new JPanel();
		panelFoto.setBackground(new Color(255, 250, 205));
		panelFoto.setBorder(new LineBorder(new Color(128, 0, 0), 2, true));
		panelFoto.setBounds(25, 73, 200, 200);
		contentPane.add(panelFoto);
		panelFoto.setLayout(null);
		
		lblFoto = new JLabel("Foto");
		lblFoto.setHorizontalAlignment(SwingConstants.CENTER);
		lblFoto.setBounds(0, 0, 200, 200);
		panelFoto.add(lblFoto);
		
		lblPerfil = new JLabel("Tipo de Perfil");
		lblPerfil.setHorizontalAlignment(SwingConstants.RIGHT);
		lblPerfil.setBounds(235, 94, 87, 17);
		lblPerfil.setFont(new Font("Eras Medium ITC", Font.PLAIN, 14));
		contentPane.add(lblPerfil);

		lblNombre = new JLabel("Nombre");
		lblNombre.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNombre.setBounds(235, 126, 87, 17);
		lblNombre.setFont(new Font("Eras Medium ITC", Font.PLAIN, 14));
		contentPane.add(lblNombre);
		
		lblApellido = new JLabel("Apellido");
		lblApellido.setHorizontalAlignment(SwingConstants.RIGHT);
		lblApellido.setBounds(235, 155, 87, 17);
		lblApellido.setFont(new Font("Eras Medium ITC", Font.PLAIN, 14));
		contentPane.add(lblApellido);
		
		lblNacimiento = new JLabel("Nacimiento");
		lblNacimiento.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNacimiento.setBounds(235, 184, 87, 17);
		lblNacimiento.setFont(new Font("Eras Medium ITC", Font.PLAIN, 14));
		contentPane.add(lblNacimiento);
		
			lblEdad = new JLabel("Edad");
			lblEdad.setHorizontalAlignment(SwingConstants.RIGHT);
			lblEdad.setBounds(235, 213, 87, 17);
			lblEdad.setFont(new Font("Eras Medium ITC", Font.PLAIN, 14));
			contentPane.add(lblEdad);
		
		lblSitio = new JLabel("Sitio Web");
		lblSitio.setHorizontalAlignment(SwingConstants.RIGHT);
		lblSitio.setBounds(235, 242, 87, 17);
		lblSitio.setFont(new Font("Eras Medium ITC", Font.PLAIN, 14));
		contentPane.add(lblSitio);;
		
		comboPerfil = new JComboBox<Object>();
		comboPerfil.setModel(new DefaultComboBoxModel<Object>(new String[] {"Cliente", "Desarrollador"}));
		comboPerfil.setBounds(332, 92, 200, 22);
		contentPane.add(comboPerfil);
		
		titulo = new JTextField();
		titulo.setEnabled(false);
		titulo.setBackground(new Color(128, 0, 0));
		titulo.setForeground(Color.WHITE);
		titulo.setFont(new Font("Eras Medium ITC", Font.BOLD, 20));
		titulo.setHorizontalAlignment(SwingConstants.CENTER);
		titulo.setText("Alta de Perfil");
		titulo.setEditable(false);
		titulo.setBounds(0, 0, 709, 50);
		contentPane.add(titulo);
		titulo.setColumns(10);
		
		campoNombre = new JTextField();
		campoNombre.setBounds(332, 125, 347, 20);
		contentPane.add(campoNombre);
		campoNombre.setColumns(10);
		
		campoApellido = new JTextField();
		campoApellido.setBounds(332, 154, 347, 20);
		contentPane.add(campoApellido);
		campoApellido.setColumns(10);
				
		campoDia = new JTextField();
		campoDia.setText("01");
		campoDia.setBounds(332, 183, 60, 20);
		contentPane.add(campoDia);
		
		campoMes = new JTextField();
		campoMes.setText("01");
		campoMes.setBounds(402, 183, 60, 20);
		contentPane.add(campoMes);
	
		campoAnio = new JTextField();
		campoAnio.setText("1970");
		campoAnio.setBounds(472, 183, 60, 20);
		contentPane.add(campoAnio);
				
		campoEdad = new JTextField();
		campoEdad.setBounds(332, 212, 60, 20);
		contentPane.add(campoEdad);
		campoEdad.setText("1");
		campoEdad.setColumns(10);
		
		campoWeb = new JTextField();
		campoWeb.setBounds(332, 241, 347, 20);
		campoWeb.setEnabled(false);
		contentPane.add(campoWeb);
		
		campoURL = new JTextField();
		campoURL.setEnabled(false);
		campoURL.setBounds(126, 285, 553, 22);
		contentPane.add(campoURL);
			
		aceptar = new JButton("Aceptar");
		aceptar.setBounds(437, 367, 116, 23);
		aceptar.setFont(new Font("Eras Medium ITC", Font.PLAIN, 15));
		contentPane.add(aceptar);
		
		cancelar = new JButton("Cancelar");
		cancelar.setFont(new Font("Eras Medium ITC", Font.PLAIN, 15));
		cancelar.setBounds(563, 368, 116, 23);
		contentPane.add(cancelar);
		
		examinar = new JButton("Examinar");
		examinar.setBounds(25, 285, 89, 23);
		contentPane.add(examinar);
	}
	
	
	//CENTRA LA VENTA PRINCIPL
	private void centrarPantalla(JFrame ventana, int x, int y){
		Toolkit t = Toolkit.getDefaultToolkit();
		Dimension pantalla = t.getScreenSize();
		int height = pantalla.height;
		int width = pantalla.width;
		int px =  (int) (width-x)/2;
		int py =  (int) (height-y)/2;
		ventana.setBounds(px, py, x, y);
	}
		
}
